<?php

class PartiteController extends AppController {

    var $name = 'Partite';

    var $scaffold;


    function calcola_punteggi ($partita_id) {

        $this->Partita->read(null, $partita_id);

        $this->loadModel('Formazione');

        $this->loadModel('Sostituzione');

      $formazione_casa = $this->Formazione->find('first',
            array(
            'conditions' => array('Formazione.giornata_id' => $this->Partita->data["Giornata"]["id"], 'Formazione.fantasquadra_id' => $this->Partita->data["Fantasquadra_casa"]["id"]), //array of conditions
            'recursive' => 2));

       debug($formazione_casa["Formazione"]);
       debug($formazione_casa["Fantasquadra"]["nome"]);

       //applico le sostituzioni
       $this->Formazione->requestAction('/formazioni/applica_sostituzioni/'.($formazione_casa["Formazione"]["id"]));

       debug("possibile request action: ".'/formazioni/applica_sostituzioni/'.($formazione_casa["Formazione"]["id"]));

      $bonus_formazione_trasferta = (4 - $formazione_casa["Formazione"]["difensori"]) / 2 + ($formazione_casa["Formazione"]["attaccanti"] - 2);

      debug ("Bonus trasferta: ". $bonus_formazione_trasferta);

      $formazione_trasferta = $this->Formazione->find('first',
            array(
            'conditions' => array('Formazione.giornata_id' => $this->Partita->data["Giornata"]["id"], 'Formazione.fantasquadra_id' => $this->Partita->data["Fantasquadra_trasferta"]["id"]), //array of conditions
            'recursive' => 2));

       debug($formazione_trasferta["Formazione"]);
       debug($formazione_trasferta["Fantasquadra"]["nome"]);

              //applico le sostituzioni
      debug("HHHHH");
      $this->Formazione->requestAction('/formazioni/applica_sostituzioni/'.($formazione_trasferta["Formazione"]["id"]));
      debug("UUUUU");


 debug("possibile request action: ".'/formazioni/applica_sostituzioni/'.($formazione_trasferta["Formazione"]["id"]));


      $bonus_formazione_casa = (4 - $formazione_trasferta["Formazione"]["difensori"]) / 2 + ($formazione_trasferta["Formazione"]["attaccanti"] - 2);

      debug ("Bonus casa: ". $bonus_formazione_casa);


        $totale_casa = $this->ritorna_calciatori_che_hanno_giocato($formazione_casa) + $bonus_formazione_casa + 2;
        debug ("totale definitivo casa". $totale_casa);

        $this->Formazione->set(
            array (
                'id' => $formazione_casa["Formazione"]["id"],
                'bonus_formazione_avversaria' => $bonus_formazione_casa,
                'punteggio' => $totale_casa,
                'gol' => $this->converti_in_gol($totale_casa),
                'in_casa' => 1
            )
        );

        debug ("prima del save casa");
        debug($this->Formazione->id); 
        debug($this->Formazione->data); die();

        $this->Formazione->save();

        $totale_trasferta = $this->ritorna_calciatori_che_hanno_giocato($formazione_trasferta) + $bonus_formazione_trasferta;
        debug ("totale definitivo trasferta ". $totale_trasferta);

                $this->Formazione->set(
            array (
                'id' => $formazione_trasferta["Formazione"]["id"],
                'bonus_formazione_avversaria' => $bonus_formazione_trasferta,
                'punteggio' => $totale_trasferta,
                'gol' => $this->converti_in_gol($totale_trasferta),
                'in_casa' => 0
            )
        );

        $this->Formazione->save();



    
    }

    public function ritorna_calciatori_che_hanno_giocato ($formazione) {


            $gente_sostituita = $this->Sostituzione->find('all',
            array(
            'conditions' => array(
            'Sostituzione.formazione_id' => $formazione["Formazione"]["id"]
            )) );

        //debug($gente_sostituita);

        $id_sostituiti = array();

        foreach ($gente_sostituita as $sostituito) {
            $id_sostituiti[] = $sostituito["Sostituzione"]["calciatore_uscito_id"];
            $id_entrati[] =    $sostituito["Sostituzione"]["calciatore_entrato_id"];

        }

        $calciatori_calcolabili = $this->Formazione->FormazioneCalciatore->find('all',
            array(
            'conditions' => array(

            'FormazioneCalciatore.formazione_id' => $formazione["Formazione"]["id"],
            "NOT" => array ("FormazioneCalciatore.calciatore_id" => $id_sostituiti),
            "OR" => array ("FormazioneCalciatore.titolare " => "1",
                        "FormazioneCalciatore.calciatore_id" => $id_entrati
            )
            ), //array of conditions
            'recursive' => 2
        ));

        //debug ($calciatori_calcolabili);

        //sommiamo questi giocatori calcolabili

        $totale = 0;

        foreach ($calciatori_calcolabili as $calciatore) {

          //  debug($calciatore["Calciatore"]);
            debug("Voto calcolato ".$calciatore["Calciatore"]["cognome"]." ".$calciatore["Calciatore"]["nome"].": ".$calciatore["Calciatore"]["Prestazione"][0]["voto_calcolato"]);
            $totale+= $calciatore["Calciatore"]["Prestazione"][0]["voto_calcolato"];

        }

        $bonus_difesa = $this->calcola_bonus_difesa($formazione, $calciatori_calcolabili);
        

        debug ("Totale senza bonus difesa". $totale);
        debug ("Bonus difesa ". $bonus_difesa);
        
        return $totale + $bonus_difesa;

    }

    public function calcola_bonus_difesa ($formazione_array, $calciatori) {

           $bonus_difesa = 0;

           $difensori = array();

           if ($formazione_array["Formazione"]["difensori"] >= 4) {

           $voti_difensori = array();

           foreach ($calciatori as $calciatore) {
               if ($calciatore["Calciatore"]["ruolo"] == 1)
                    $voti_difensori[] = $calciatore["Calciatore"]["Prestazione"][0]["voto_gazzetta"];
           }

           sort($voti_difensori);
           $voti_difensori = array_reverse($voti_difensori);
           
           $voti_difensori = array_slice($voti_difensori, 0, -1);

           
           foreach ($calciatori as $calciatore) {
               if ($calciatore["Calciatore"]["ruolo"] == 0) {
                    //è il portiere
                    $voti_difensori[] = $calciatore["Calciatore"]["Prestazione"][0]["voto_gazzetta"];
                    break;

               }
              
           }


           $media_voto = array_sum($voti_difensori) / 4;

           if ($media_voto < 6) $bonus_difesa = 0;
           else if ($media_voto >= 6 && $media_voto < 6.5) $bonus_difesa = 1;
           else if ($media_voto >= 6.5 && $media_voto < 7) $bonus_difesa = 3;
           else if ($media_voto >= 7) $bonus_difesa = 6;

           }
           else {
               $media_voto = -1;
           }
//
        $this->Formazione->set(
            array (
                'id' => $formazione_array["Formazione"]["id"],
                'bonus_difesa' => $bonus_difesa,
                'media_difesa' => $media_voto
            )
        );

      $this->Formazione->save();
          
           return $bonus_difesa;

    }

    public function converti_in_gol ($punteggio) {

        if ($punteggio >= 60)
            return $punteggio / 6 - 10;
        else return 0;
    }

}

//   